local skynet = require "skynet"
local sprotoloader = require "sprotoloader"

local max_client = 64

-- Coding Format : UTF-8

-- 「main.lua 脚本介绍」
-- 我们从命令行窗口执行./skynet mini-server3/config 命令后，将从start入口启动main.lua，这是skynet在服务器上运行的第一个脚本

-- start:初始化服务，将消息处理函数注册到C层
skynet.start(function()
    -- error:向log服务发送消息
    skynet.error("Server start")
    -- uniqueservice:启动唯一的服务，如果已经启动就返回地址
    skynet.uniqueservice("protoloader")

    -- getenv:返回当前进程注册表项的值
    if not skynet.getenv "daemon" then
        -- newservice:根据名称启动新服务
        local console = skynet.newservice("console")
    end

    -- 启动调试控制台
    skynet.newservice("debug_console", 8000)

    -- 启动WatchDog
    local watchdog = skynet.uniqueservice("watchdog")

    -- call(addr,type,...):发送消息到服务地址，等待回应
    skynet.call(watchdog, "lua", "start", {
        port = 8888,
        maxclient = max_client,
        nodelay = true
    })

    -- 启动服务
    local dbService = skynet.uniqueservice("dbService")
    local userManager = skynet.uniqueservice("userManager")
    local chatService = skynet.uniqueservice("chatService")
    skynet.call(dbService, "lua", "start", {})
    skynet.call(userManager, "lua", "start", {})
    skynet.call(chatService, "lua", "start", {})

    skynet.error("Watchdog listen on", 8888)
    skynet.exit()
end)
